#ifndef LOCAL_THRESHOLD_OPERATOR_HPP
#define LOCAL_THRESHOLD_OPERATOR_HPP

//------------------------------------------------------------------------------
// Fichier d'entête utilisés
//------------------------------------------------------------------------------
#include "Operator.hpp"
#include "ThresholdFinder.hpp"
#include "BinaryImage.hpp"
#include "Gradiant.hpp"

namespace ImageAnalysis
{
//----------------------------------------------------------------------
// Cette classe permet d'appliquer un seuillage local à une image
// gradiant. A partir d'une méthode permettant de trouver un seuil
// et une taille de fenêtre, on va seuiller l'image gradient pixel par pixel
// en détectant la seuil autour du pixel (dans la fenêtre) pour obtenir
// une image bianire.
//----------------------------------------------------------------------
class LocalThresholdOperator : public Operator
{
public:
	//----------------------------------------------------------------------
	// Structure
	//----------------------------------------------------------------------
	
	//----------------------------------------------------------------------
	// Constructeur
	//----------------------------------------------------------------------
	LocalThresholdOperator( Gradiant* gradiant, BinaryImage* image, ThresholdFinder* finder, int windowSize );
	
	//----------------------------------------------------------------------
	// Destructeur
	//----------------------------------------------------------------------
	virtual ~LocalThresholdOperator();
	
	//----------------------------------------------------------------------
	// Permet d'appliquer l'algorithme de seuillage à l'image
	//----------------------------------------------------------------------
    	virtual void Process( );

private:
	//----------------------------------------------------------------------
    // 
	//----------------------------------------------------------------------
	ThresholdFinder* thresholdFinder;
	Gradiant* currentGradiant;
	BinaryImage* currentThresholdImage;
	int thresholdWindowSize;

        //----------------------------------------------------------------------
        // Constructeur par copie et oprérateur d'affectation en privée pour
        // interdire leur utilisation
        //----------------------------------------------------------------------
        LocalThresholdOperator( const LocalThresholdOperator& copy);
        LocalThresholdOperator& operator=( const LocalThresholdOperator& copy );
};

}

#endif //LOCAL_THRESHOLD_OPERATOR_HPP
